/**
 * Created by 牛晨辉 on 2019/10/12.规则类型JS
 */
/**
 * 格式化Rule
 * @param options
 */
/**
 * options必传值：
 * 1.ruleId         规则ID
 * 2.tableId        表格的ID
 * 3.dictValue      字段值
 * 4.dictLabel      显示名称
 * 5.roleId         评价人待办角色ID
 * 6.isMustFill     是否为必填
 * 7.fillRoleIds    可评人角色ID
 */
(function ($) {
    $.extend({
        rule: {
            _option: {},
            fmRule: function (options) {
                var defaults = {
                    lsClass: "",             // 离散型（下拉框）类名，可设置样式     注：自定义样式需加  !important,如：color:red !important;
                    wbClass: "",             // 文本框类名，可设置样式
                    srClass: "",             // 输入框类名，可设置样式
                    sortable: false,        // 默认false就默认显示，设为true则会被排序
                    order: "asc",           // 默认的排序方式为"asc（升序）"，也可以设为"desc（降序）"。
                    clickToSelect: true,    // 默认true不响应，设为false则当点击此行的某处时，不会自动选中此行的checkbox（复选框）或radiobox（单选按钮
                    titleTooltip: true,     // (String)当悬浮在某控件上，出现提示 - 参考 Bootstrap 提示工具（Tooltip）插件
                    align: true,            // (String)每格内数据的对齐方式，有：left（靠左）、right（靠右）、center（居中）
                    halign: true,           // (String)table header（表头）的对齐方式，有：left（靠左）、right（靠右）、center（居中）
                    cols: 30,               // cols 属性规定 textarea 的可见宽度。
                    rows: 5,                // rows 属性规定 textarea 的可见高度。
                    placeholder: "",        // 提示文字
                    maxlength: 200,         // 最大长度
                    width: 70,               // 输入框宽度
                    height: "",              // 输入框高度
                    halign: "",
                    roleId: "",              //评价人待办角色ID
                    isMustFill: "",          //是否为必填
                    fillRoleIds: "",         //可评人角色ID
                    coloumType: "",			//列类型：2=设备体系评价标准手动评分列（2021/1/9）
                    selfWidth: null,			//自定义宽度
                };

                var options = $.extend(defaults, options);
                _option = options;
                var needFM = "true";//是否需要格式化
                if (options.fillRoleIds != null && options.fillRoleIds != "") {
                    needFM = $.ajax({
                        url: "/zzjx/deptparamRole/needFM?ruleId=" + options.roleId + "&fillRoleIds=" + options.fillRoleIds,
                        async: false
                    }).responseText;//判断当前登录人是否能评价该列
                }

                var jyStr = "";//校验字符串


                if (options.ruleId != "" && options.ruleId != null && needFM == "true") {
                    var req = "";
                    var isD = "";
                    if (options.isDisabled) {
                        isD = "disabled";
                    }
                    if (options.isMustFill != null && options.isMustFill != "" && options.isMustFill == "0") {
                        req = "required";
                    }
                    var ruleType = $.ajax({
                        url: "/zzjx/rule/getRuleType?id=" + options.ruleId,
                        async: false
                    }).responseText;//�Ӻ�̨��ȡ��������
                    if (ruleType == "LS") {//离散型
                        var ruleDetails = $.ajax({
                            url: "/zzjx/rule/getDetails?ruleID=" + options.ruleId,
                            async: false
                        }).responseJSON;//�Ӻ�̨��ȡ��ɢ��ֵ
                        return {
                            field: options.dictValue,
                            title: options.dictLabel,
                            sortable: options.sortable,
                            order: options.order,
                            clickToSelect: options.clickToSelect,
                            titleTooltip: options.titleTooltip,
                            align: options.align,
                            halign: options.halign,
                            formatter: function (value, row, index) {
                                var noValClass = "";//初始颜色为无色
                                if (options.isMustFill != null && options.isMustFill != "" && options.isMustFill == "0") {
                                    noValClass = "no-val-select";//必填渲染为换黄色
                                }
                                if (typeof (value) != "undefined" && value != null && value != "") {//有值变为无色
                                    noValClass = "";
                                }

                                var html = '<div class="form-group" ><select style="" ' + isD + '  class="' + noValClass + ' form-control noselect2 selectpicker ' + options.lsClass + ' ' + req + '" onchange="$.rule.changeData(' + index;
                                html += ',this,' + options.tableId + ')"  name="' + options.dictValue + '" >' + '<option  value=""></option>';
                                for (var i in ruleDetails) {
                                    if (value == ruleDetails[i].score) {
                                        html += '<option  value="' + ruleDetails[i].score + '" selected>' + ruleDetails[i].valueExplain + '</option>';
                                    } else {
                                        html += '<option  value="' + ruleDetails[i].score + '">' + ruleDetails[i].valueExplain + '</option>';
                                    }

                                }
                                html += '</select></div>';
                                return html;
                            }
                        }
                    } else if (ruleType == "WB") {
                        var rule = $.ajax({url: "/zzjx/rule/getRule?id=" + options.ruleId, async: false}).responseJSON;//�Ӻ�̨��ȡ����ʵ��

                        return {
                            field: options.dictValue,
                            title: options.dictLabel,
                            sortable: options.sortable,
                            order: options.order,
                            clickToSelect: options.clickToSelect,
                            titleTooltip: options.titleTooltip,
                            align: options.align,
                            halign: options.halign,
                            formatter: function (value, row, index) {

                                if (null != rule.height) {
                                    options.rows = rule.height;
                                }
                                if (null != rule.width) {
                                    options.cols = rule.width;
                                }
                                if (null != rule.placeholder) {
                                    options.placeholder = rule.placeholder;
                                }
                                if (null != rule.maxLenth) {
                                    options.maxlength = rule.maxLenth;
                                }
                                var html1 = '<textarea onPaste="$.rule.maxLimit(this,' + options.maxlength + ')" ' + isD + ' onKeyUp="$.rule.maxLimit(this,' + options.maxlength + ')" oninput="$.rule.maxLimit(this,' + options.maxlength + ')" style=" border:solid 1px #63CFF2;white-space:pre-wrap;" ';
                                html1 += ' placeholder="' + options.placeholder + '"  cols="' + options.cols + '" rows="' + options.rows + '" class="' + options.wbClass + ' ' + req + '" onblur="$.rule.changeData(' + index;
                                if (typeof (value) == "undefined") {
                                    html1 += ',this,' + options.tableId + ')"  name="' + options.dictValue + '"></textarea>';
                                } else {
                                    html1 += ',this,' + options.tableId + ')"  name="' + options.dictValue + '">' + value + '</textarea>';
                                }

                                return html1;
                            }
                        }

                    } else if (ruleType == "SR") {
                        var rule = $.ajax({url: "/zzjx/rule/getRule?id=" + options.ruleId, async: false}).responseJSON;//�Ӻ�̨��ȡ����ʵ��
                        var html1 = '<input type="text" style="border:solid 1px #63CFF2;';
                        if (null != rule.height) {
                            options.height = rule.height;
                            html1 += 'height:' + options.height + 'px;';
                        }
                        if (null != rule.width) {
                            options.width = rule.width;
                        }
                        html1 += 'width:' + options.width + 'px;';
                        if (null != rule.placeholder) {
                            options.placeholder = rule.placeholder;
                        }
                        if (null != rule.maxLenth) {
                            options.maxlength = rule.maxLenth;
                        }
                        html1 += '" class="' + options.srClass + ' ' + req + '" ' + isD + ' name="' + options.dictValue + '" value="';
                        html2 = '"';

                        html3 = ' onclick="$.rule.standardClick(this,';
                        html4 = ',' + options.tableId + ')" ';


                        html5 = ' onblur="$.rule.changeData('
                        html6 = ', this,' + options.tableId + ')" placeholder="' + options.placeholder + '" maxlength="' + options.maxlength + '" />';
                        /*return '<input type="text" style="" class="inp" name="'+dictValue+'" value="'+value+'" onblur="changeData('+ index +', this);" placeholder="" maxlength="" />';*/
                        return {
                            field: options.dictValue,
                            title: options.dictLabel,
                            sortable: options.sortable,
                            order: options.order,
                            clickToSelect: options.clickToSelect,
                            titleTooltip: options.titleTooltip,
                            align: options.align,
                            halign: options.halign,
                            formatter: function (value, row, index) {
                                /* if (value == "" || typeof(value) == "undefined" ){
                                     value="";
                                     return html1+value+html2+index+html3;
                                 } else {
                                     return html1+value+html2+index+html3;
                                 }*/
                                if (options.coloumType == "2") {
                                    return html1 + value + html2 + html3 + index + html4 + html5 + index + html6;
                                } else {
                                    return html1 + value + html2 + html5 + index + html6;
                                }

                            }
                        }

                    } else {//规则类型为空的
                        if (options.selfWidth != null) {
                            return {
                                field: options.dictValue,
                                title: options.dictLabel,
                                align: options.align,
                                halign: options.halign,
                                sortable: options.sortable,
                                width: options.selfWidth,
                            }
                        } else {
                            return {
                                field: options.dictValue,
                                title: options.dictLabel,
                                align: options.align,
                                halign: options.halign,
                                sortable: options.sortable
                            }
                        }
                    }
                } else {//规则类型为空的
                    if (options.selfWidth != null) {
                        return {
                            field: options.dictValue,
                            title: options.dictLabel,
                            align: options.align,
                            halign: options.halign,
                            sortable: options.sortable,
                            cellStyle: {
                                css: {
                                    "min-width": options.selfWidth + "px",
                                    "max-width": options.selfWidth + "px"
                                }
                            }
                        }
                    } else {
                        return {
                            field: options.dictValue,
                            title: options.dictLabel,
                            align: options.align,
                            halign: options.halign,
                            sortable: options.sortable
                        }
                    }
                }
            },
            changeData: function (index, obj, tableId) {//绑定单元格数据
                var value = $(obj).val();
                var name = $(obj).attr('name');
                var tempTableId = tableId.id == undefined ? tableId : tableId.id;
                //通过 index 获取指定的行
                var row = $("#" + tempTableId + "").bootstrapTable('getOptions').data[index];
                //将 input 的值存进 row 中
                row[name] = value;
                //更新指定的行，调用 'updateRow' 则会将 row 数据更新到 data 中，然后再重新加载
                //$("#table").bootstrapTable('updateRow',{index: index, row: row});
                if (value != "" && $(obj).is('select')) {
                    $(obj).removeClass("no-val-select");
                } else if (value == "" && $(obj).is('select')) {
                    $(obj).addClass("no-val-select");
                }
                if (row.scoringMethod != null) {//如果公式不是空的并且校验数值没问题
                    /*var score = $.ajax({url:"/zzjx/formula/calcScore",async:false,data:{map:row},dataType: "json",}).responseText;*/
                    /*if(formulaMap[row.scoringMethod[0]].autoCount==1||this.checkRow(row)==false){
                        return;
                    }*/

                    for (var i = 0; i < row.scoringMethod.length; i++) {//遍历该指标关联的公式

                        if (formulaMap[row.scoringMethod[i]].autoCount != 1 && this.checkRow(row, formulaMap[row.scoringMethod[i]]) == true) {//判断该公式为自动计算并且满足计算条件

                            var result = this.compute(row, formulaMap[row.scoringMethod[i]].id, formulaMap[row.scoringMethod[i]].type);//计算结果

                            if (result != null) {
                                var resuletStore = formulaMap[row.scoringMethod[i]].resuletStore;//计算结果存储位置
                                row[resuletStore] = result;
                                $("#" + tempTableId + "").bootstrapTable('updateRow', {index: index, row: row});   //更新一行数据，感觉不太妥当
                                //$("#"+tableId.id+"").bootstrapTable('updateCell', {index: index,field: resuletStore,value: result});
                            }
                        }
                    }


                }
            },
            changeData2: function (index, obj, tableId) {
                var value = $(obj).val();
                var name = $(obj).attr('name');
                //通过 index 获取指定的行
                var row = $("#" + tableId.id + "").bootstrapTable('getOptions').data[index];
                //将 input 的值存进 row 中
                row[name] = value;
                //更新指定的行，调用 'updateRow' 则会将 row 数据更新到 data 中，然后再重新加载
                //$("#table").bootstrapTable('updateRow',{index: index, row: row});
                if (value != "" && $(obj).is('select')) {
                    $(obj).removeClass("no-val-select");
                } else if (value == "" && $(obj).is('select')) {
                    $(obj).addClass("no-val-select");
                }
            },
            maxLimit: function (that, len) {//输入长度最大提示ʾ
                if ($(that).val().length > len) {
                    var num = $(that).val().substr(0, len);
                    $(that).val(num);
                    $.modal.alertError("最多只能输入" + len + "个字!");
                }
            },
            checkTableRequired: function (tempTableid) {
                tempTableid = tempTableid == undefined ? _option.tableId : tempTableid;
                var isOk = true;
                $("#" + tempTableid + " .required").each(function () {
                    var val = $(this).val();
                    if (val == "") {
                        isOk = false;
                        return false;
                    }
                });
                return isOk;
            },
            checkRow: function (row, formula) {//检查行是否满足公式计算条件
                var scoringMethod = formula.scoringMethod;//获取关联的公式
                var dictVlue = new Array();
                var i = 0;
                for (var dd in dictData) {//把表头取出来
                    dictVlue[i++] = dictData[dd]["dictValue"];//字段值
                }
                for (var cc in dictVlue) {//需要计算的值都存在
                    var value = dictVlue[cc];
                    if (scoringMethod.indexOf(value) != -1) {
                        if ("target" == value && /^[0-9]*$/.test(scoringMethod.slice(scoringMethod.indexOf(value) + 6, scoringMethod.indexOf(value) + 7))) {//防止配置匹配到配置1之类的

                        } else {
                            var cellValue = row[value];
                            if ("" == cellValue || null == cellValue || undefined == cellValue || !/^-?\d+(\.\d+)?\%?$/.test(cellValue)) {//只能输入数字或者百分比
                                if (/^-?\d+(\.\d+)?\%?$/.test(cellValue)) {
                                    return true;
                                } else {
                                    return false;
                                }


                            }
                        }
                    }
                }
                return true;
            },
            compute: function (row, formulaId, type) {//计算结果，并返回
                var result = null;
                $.ajax({
                    type: "GET",
                    url: "/zzjx/formula/calcScore",
                    data: {row: JSON.stringify(row), "formulaId": formulaId},
                    dataType: "json",
                    async: false,
                    success: function (data) {
                        if (data.code == 500) {
                            $.modal.alertWarning("公式计算出错！请检查关联的公式。");
                            data = null;
                        }
                        //var resuletStore=formulaMap[row.scoringMethod].resuletStore;//计算结果存储位置
                        if (type == 1) {//如果是亮灯公式
                            if (data == 1) {
                                data = '<i class="fa fa-circle text-danger"></i>';
                            }
                            if (data == 2) {
                                data = '<i class="fa fa-circle text-warning"></i>';
                            }
                            if (data == 3) {
                                data = '<i class="fa fa-circle text-success"></i>';
                            }
                        }
                        result = data;

                    }, error: function () {
                        $.modal.alertError("计算出错!请检查关联的公式。");
                    }
                });

                return result;
            },
            fmList: function (dictData, list) {//格式化数据，把undefined值设置为空
                var dictValue = new Array();
                for (var dd in dictData) {//获取需要格式化的列
                    if (null != dictData[dd]["listClass"]) {
                        dictValue.push(dictData[dd]["dictValue"])
                    }
                }

                for (var i = 0; i < list.length; i++) {
                    for (var a in dictValue) {
                        var data = dictValue[a];
                        if (typeof (list[i][data]) == "undefined") {
                            list[i][data] = "";
                        }
                    }
                }

                return list;


            },
            standardClick: function (obj, index, tableId) {//设备体系手动评价单击事件ps:用来给model框表格初始化数据
                var value = $(obj).val();
                var name = $(obj).attr('name');
                //通过 index 获取指定的行
                var row = $("#" + tableId.id + "").bootstrapTable('getOptions').data[index];
                var id = row["id"];

                $("#currentCheckedRowId").val(id);//告诉页面当前选中的行ID
                $("#title-dept").html(row["unitId"]);//显示当前考核选中的部门名称


                //设置表头
                var columns = [{
                    field: "id",
                    title: "ID",
                    visible: false
                }, {
                    field: 'criterion',
                    title: '评价标准'
                }, {
                    field: 'score',
                    title: '分值',
                    width: 100,
                    align: 'center',
                    cellStyle: function (value, row, index) {
                        if (value < 0) {
                            return {css: {"color": "red"}}
                        } else {
                            return {css: {"color": "#00BE6E"}}
                        }
                    },
                    class: 'score-cell'
                }, {
                    field: 'number',
                    title: '数量',
                    width: 100,
                    align: 'center',
                    formatter: function (value, row, index) {
                        var html = '<input name="number" value="' + value + '" class="number-input" type="number" min="0" onblur="numberChange(' + index + ',this)"/>';
                        return html;
                    }
                }, {
                    field: 'totalPoints',
                    title: '总分',
                    width: 100,
                    align: 'center',
                    cellStyle: function (value, row, index) {
                        if (value < 0) {
                            return {css: {"color": "red"}}
                        } else {
                            return {css: {"color": "#00BE6E"}}
                        }
                    },
                    class: 'score-cell'
                }];

                if ($.rule._option.rowIndicatorMap[row["id"]] != undefined) {

                    //销毁之前表格
                    $("#score-table").bootstrapTable('destroy');

                    var data = new Array();

                    var standards = $.rule._option.indicatorStandardListMap[$.rule._option.rowIndicatorMap[row["id"]]["id"]];

                    //获取指标信息
                    var Indicator = $.rule._option.rowIndicatorMap[row["id"]]//

                    //默认基准分最高分最低分
                    $("#ture-score").html("100");
                    $("#max-score").html("100");
                    $("#mini-score").html("0");
                    $("#gross-score").html("100");

                    $("#ture-score").html(Indicator.benScore);
                    $("#max-score").html(Indicator.maxScore);
                    $("#mini-score").html(Indicator.minScore);
                    $("#gross-score").html(Indicator.benScore);
                    $("#standard-title").html(Indicator.indName);


                    if ($.rule._option.criterionResultDataMap[row["id"]] != undefined) {//判断是否有已保存的数据
                        data = $.rule._option.criterionResultDataMap[row["id"]];

                        //初始化表格
                        $('#score-table').bootstrapTable({
                            columns: columns,
                            data: data
                        });
                        computeGrossScore();//重新计算分数
                    } else {
                        //创建数据
                        for (var i in standards) {
                            data[i] = new Object();
                            data[i].criterion = standards[i].standard;
                            data[i].score = standards[i].deductionStandard;
                            data[i].number = "";
                            data[i].totalPoints = "";
                            data[i].id = standards[i].id;
                        }

                        //初始化表格
                        $('#score-table').bootstrapTable({
                            columns: columns,
                            data: data
                        });
                    }

                    //弹窗
                    $('#standardModal').modal();

                    //先移除以前绑定的单击事件，防止冒泡
                    $("#standard-save-btn").unbind("click");

                    //再给保存按钮绑定事件
                    $("#standard-save-btn").click(function (event) {
                        row[name] = $("#gross-score").html();
                        $("#" + tableId.id + "").bootstrapTable('updateRow', {index: index, row: row});

                        var resData = $("#score-table").bootstrapTable('getData', {
                            useCurrentPage: false,
                            includeHiddenRows: true
                        });
                        $.rule._option.criterionResultDataMap[row["id"]] = resData;

                        $.ajax({
                            url: "/zzjx/criterionresultdata/addCriterionResultData/",
                            data: {
                                "rowId": row["id"],
                                "jsonString": JSON.stringify(resData),
                                "time": new Date().getTime()
                            },
                            dataType: "json",
                            type: "POST",
                            async: false,
                            success: function (result) {

                            },
                            error: function () {

                            }
                        })

                        $('#standardModal').modal('hide');

                    });
                }
            },


        }
    });
})(jQuery);
